package com.api.gbhg.liuwenbo.version3.util;

import com.api.gbhg.liuwenbo.version2.pojo.BudgetSectionIncome2;
import weaver.conn.RecordSet;

import java.util.LinkedList;
import java.util.List;

/**
 * @Description 接口工具类
 * @Author lwb
 * @Date
 */
public class ApiUtil {

    /**
     * 转结构 去下级化 带xj结构可用
     * v2.0 增加sfxycf参数
     * 如：
     *  xj[
     *      ...,
     *      ...,
     *      xj{
     *          ....
     *      }
     *  ]
     * @param paramList
     *          结果集
     * @param nf
     *          年份
     * @return
     */
    public static List<BudgetSectionIncome2> structureConversion2(List<BudgetSectionIncome2> paramList, String nf){
        List<BudgetSectionIncome2> list = new LinkedList<>();

        for (int i=0;i<paramList.size();i++){
            BudgetSectionIncome2 bean = paramList.get(i);
            bean.setCj(1);
            bean.setNf(nf);
            List<BudgetSectionIncome2> xjBean = bean.getXj();
            if (xjBean != null && xjBean.size()>0){
                for (int j = 0; j < xjBean.size(); j++) {
                    BudgetSectionIncome2 tempBean = xjBean.get(j);
                    xjChange(tempBean,2,bean.getId(),nf,list);
                }
                bean.setSfxycf(0);
            }else{
                bean.setSfxycf(1);
            }
            if (xjBean!=null)//去xj化
                bean.setXj(null);

            list.add(bean);
        }
        return list;
    }

    /**
     * 转结构 去下级化 带xj结构可用
     * 如：
     *  xj[
     *      ...,
     *      ...,
     *      xj{
     *          ....
     *      }
     *  ]
     * @param paramList
     *          结果集
     * @param nf
     *          年份
     * @return
     */
    public static List<BudgetSectionIncome2> structureConversion(List<BudgetSectionIncome2> paramList, String nf){
        List<BudgetSectionIncome2> list = new LinkedList<>();

        for (int i=0;i<paramList.size();i++){
            BudgetSectionIncome2 bean = paramList.get(i);
            bean.setCj(1);
            bean.setNf(nf);
            List<BudgetSectionIncome2> xjBean = bean.getXj();
            if (xjBean != null && xjBean.size()>0){
                for (int j = 0; j < xjBean.size(); j++) {
                    BudgetSectionIncome2 tempBean = xjBean.get(j);
                    xjChange(tempBean,2,bean.getId(),nf,list);
                }
            }
            if (xjBean!=null)//去xj化
                bean.setXj(null);

            list.add(bean);
        }
        return list;
    }

    /**
     * 下级结构转换
     * @param xjBean
     *          对象
     * @param cj
     *          层级
     * @param sjid
     *          上级id
     * @param nf
     *          年份
     * @param list
     *          目标集合
     */
    public static void xjChange(BudgetSectionIncome2 xjBean,Integer cj,String sjid,String nf,List<BudgetSectionIncome2> list){
        xjBean.setCj(cj);
        xjBean.setSjid(sjid);
        xjBean.setNf(nf);
        if (xjBean.getXj() != null && xjBean.getXj().size()>0){
            for (int i = 0; i < xjBean.getXj().size(); i++) {
                BudgetSectionIncome2 tempBean = xjBean.getXj().get(i);
                xjChange(tempBean,cj+1,xjBean.getId(),nf,list);
            }
        }
        if (xjBean.getXj()!=null)//去xj化
            xjBean.setXj(null);

        list.add(xjBean);
    }

    /**
     * 获取地方财政同意报销金额
     * @param zcqd
     *          0和1 0为财政拨款 1为非财政拨款
     * @param ysly
     *          0和1 0为当年预算 1为上年结转
     * @param zcdfczbkxm
     *          地方财政拨款项目id
     * @param dw
     *          单位
     * @param nf
     *          年份
     * @param shrq
     *          审核日期 用于查询指定日期的报销数据
     * @param flid
     *          非中央收入分类id，判断组合sql条件
     * @return
     */
    public static String getDfcz_tybxje(String zcqd,String ysly,
                                        String zcdfczbkxm,String dw,String nf,String shrq,String flid){
        RecordSet rs = new RecordSet();
        //huangwm 2023年8月29日 修复缺少d1导致sql执行报错问题
        String sql = "select ISNULL(SUM(d1.tybxje-isnull(d1.cxje,0)),0) AS tybxje  from \n" +
                //2023年10月10日 增加flid的判断取数
                "uf_bxjl_kj_dt1 d1 LEFT JOIN uf_bxjl_kj d ON d1.lcid=d.lcid  where zcqd="+zcqd+" and ysly="+ysly+ (!flid.equals("5") && !flid.equals("8")? "  AND d1.fzysrfl="+flid :"  and d1.zcdfczbkxm="+zcdfczbkxm)+
                "\n and ysxm in (select lcjlsqjlid from uf_jingfei_version where dlhsdw="
                +dw+"\n and ysnd="+nf+") AND shrq<='"+shrq+"'";
        rs.executeQuery(sql);
        if (rs.next()){
            if (rs.getString("tybxje") == null || rs.getString("tybxje").equals(""))
                return "0";
            else
                return rs.getString("tybxje");
        }else{
            return "0";
        }
    }

    /**
     * 获取中央财政同意报销金额 huangwm 2023年9月21日
     * @param zcqd
     *          0和1 0为财政拨款 1为非财政拨款
     * @param ysly
     *          0和1 0为当年预算 1为上年结转
     * @param kmjxj
     *          0和1 分别对应科目级和科目下级，在财政收入的层级里0就是第一级，非第一级的都为1
     * @param dygnkmbid
     *          当kmjxj为0时为uf_zyfzbksr_km表的id，1则是uf_zyfzbksr_xj表的id
     * @param dw
     *          单位
     * @param nf
     *          年份
     * @return
     */
    public static String getZycz_tybxje(String zcqd,String ysly,String kmjxj,
                                        String dygnkmbid,String dw,String nf,String shrq){
        RecordSet rs = new RecordSet();
        //huangwm 2023年8月29日 修复缺少d1导致sql执行报错问题
        String sql = "select ISNULL(SUM(d1.tybxje-isnull(d1.cxje,0)),0) AS tybxje  " +
                "from uf_bxjl_kj_dt1 d1 LEFT JOIN uf_bxjl_kj d ON d1.lcid=d.lcid where zcqd="+zcqd+" and ysly="+ysly+" and d1.kmjxj="+kmjxj+
                " and d1.dygnkmbid='"+dygnkmbid+
                "' and d1.ysxm in (select lcjlsqjlid from uf_jingfei_version where dlhsdw="+dw+" " +
                "and ysnd="+nf+") AND d.shrq<='"+shrq+"'";
        rs.executeQuery(sql);
        if (rs.next()){
            if (rs.getString("tybxje") == null || rs.getString("tybxje").equals(""))
                return "0";
            else
                return rs.getString("tybxje");
        }else{
            return "0";
        }
    }

    public static String getWorkFlowName(String requestid){
        RecordSet rs = new RecordSet();
        String sql = "select requestname from workflow_requestbase where requestid = "+requestid+" ";
        rs.executeQuery(sql);
        if (rs.next()){
            return rs.getString("requestname");
        }else{
            return "";
        }
    }
}
